<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // Map  是一种类似于对象的数据结构   --- 键名可以是任意数据类型


        // 对象的语法   键名必须是字符串


        const map = new Map() ;
        map.set('name' , 'yy');
        map.set([1,2,3] , '数组');
        map.set(2 , 2) ;
        map.set(null , 3) ;

        map.set(NaN , 4) ;
        map.set(NaN , 5) ;
        // 在map中  NaN和NaN是相等的


        const arr2 = [] ;
        map.set(arr2 , '数组2');
        console.log(map);

        console.log(map.get(2));
        console.log(map.get('name'));
        console.log(map.get(null));

        console.log(map.get(NaN));


        // console.log(map.get([1,2,3]));   // undefined

        console.log(map.get(arr2));


        map.delete(arr2) ;

        console.log(map.has(arr2));



        map.forEach((item , key) => {
            // console.log(item);
            console.log(key);
        })




        // 面试题
        const obj = {} ;
        var a = 'a' ;
        var b = 'b' ;
        obj[a] = a ;
        obj[b] = b ;

        console.log(obj[a]);  //  'a'



        const obj2 = {} ;
        const o1 = {name : 'cc'} ;
        const o2 = {name : 'aa'} ;


        // 在对象中如果以引用数据类型为键名的时候   会自动调用  toString这个方法把它转为字符串

        obj2[o1] = 100 ;   // obj2['[object Object]'] = 100
        obj2[o2] = 200 ;   //  obj2['[object Object]'] = 200

        console.log(obj2[o1]);   // 200

        console.log(obj2);
        

    </script>
    
</body>
</html>